package com.tim.third.demo;

import lombok.extern.slf4j.Slf4j;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;

/**
 * 发送普通文本的邮件
 * 	导包：javax.mail#mail 1.4.7
 */
@Slf4j
public class SendMailDemo {
	public static final String FROM_MAIL = "yun6713@sohu.com";
	public static final String TO_MAIL = "1052023708@qq.com";

    public static void main(String[] args) {
    	SendMailDemo sm = new SendMailDemo();
    	sm.sendMail("hello", "world");

    }
    
    public void sendMail(String title, String content){

        // 定义邮箱服务器配置
        Properties prop = new Properties();
        // 设置邮件服务器主机名 （163 邮件服务器地址："mail.smtp.host"  "smtp.163.com"）
        prop.setProperty("mail.smtp.host", "smtp.sohu.com");
        // 设置邮件服务器的端口
        prop.setProperty("mail.smtp.port", "25");
        // 设置邮件服务器认证属性 （设置为true表示发送服务器需要身份验证）
        prop.setProperty("mail.smtp.auth", "true");
		prop.setProperty("mail.transport.protocol", "smtp");
        // 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证
//         prop.setProperty("mail.smtp.port", "465");
//         prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
//         prop.setProperty("mail.smtp.socketFactory.fallback", "false");
//         prop.setProperty("mail.smtp.socketFactory.port", "465");
		
		Transport ts=null;
		try{
			// 使用JavaMail发送邮件的5个步骤
	        // 1. 创建session
			Session session = Session.getInstance(prop);
	        // 开启Session的debug模式，这样就可以查看到程序发送Email的运行状态
	        session.setDebug(true);
	        // 2. 通过session得到transport对象
	        ts = session.getTransport();
	        // 3. 使用邮箱的用户名和密码连上邮件服务器（用户名只需写@前面的即可，密码是指授权码）
	        ts.connect("smtp.sohu.com", "yun6713", "JB32ZT456ECYA0");
	        // 4. 创建邮件
	        // 发送普通文本的邮件
	        Message message = createSimpleTxtMail(session, title, content);
	        
	        // 5. 发送邮件
	        ts.sendMessage(message, message.getAllRecipients());
		}catch(Exception e){
			log.error("Send mail error, ", e);
		}finally{
	        // 关闭transport对象
	        try {
				ts.close();
			} catch (MessagingException e) {
				log.error("Close Transport error, ", e);
			}
		}
        
    }

    /**
     * 普通文本邮件
     *      创建一封只包含文本的邮件
     * @param session
     * @return
     */
    public static MimeMessage createSimpleTxtMail(Session session, String title, String content) throws MessagingException {
        // 创建邮件对象
        MimeMessage message = new MimeMessage(session);
        // 设置邮件的发件人的邮箱地址
        message.setFrom(new InternetAddress(FROM_MAIL));
        // 设置邮件的收件人的邮箱地址 （现在发件人和收件人是一样的，那就是自己给自己发）
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(TO_MAIL));

        // 发送给多个收件人
        // message.setRecipients(Message.RecipientType.TO, new InternetAddress[] {});
        // Cc: 抄送（可选）
        // message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress(""));
        // Bcc: 密送（可选）
        // message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress(""));

        // 邮件的主题
        message.setSubject(title);
        // 设置发送日期
        message.setSentDate(new Date());
        // 邮件的文本内容 （setText()：纯文本内容）
        message.setText(content);
        
        // 返回创建好的邮件对象
        return message;
    }
}
